Un Cliente con Applicazioni Avanzate per l'Aliasing in GraphWorX64

Di recente, ci è stata posta questa domanda e volevo evidenziarla, poiché rappresenta una soluzione interessante che tratta alcune funzionalità chiave in GraphWorX64, il ricco strumento di visualizzazione dei dati di ICONICS. Nello specifico la domanda è questa:

"Come posso configurarlo in modo che quando carico un display da una selezione di asset, io possa passare, insieme ad ess,o diversi alias (ad es. metadati su tale asset) che vengono tutti uniti in un unico alias nel display?"

Comprendere le Basi di Asset e Alias

Prima di trattare la parte relativa alla soluzione, cerchiamo di capire cosa si intenda per asset e alias.

Gli asset fanno riferimento ad AssetWorX, che è il modulo che ci consente di costruire una rappresentazione gerarchica delle apparecchiature, collegare ad esse fonti di dati correlate e persino assegnare comandi che l'utente può attivare da quello stesso asset. Il caricamento di un display relativo a un asset, come chiesto nella domanda, è una delle applicazioni più comuni di quei comandi. I nostri video di training in merito all'Organizzazione degli Asset  trattano questo argomento in modo molto dettagliato. 

L'aliasing è uno strumento versatile nelle applicazioni ICONICS. In parole povere, vi consente di definire un "nome alias" come segnaposto che puoi utilizzare nel testo del display, nelle fonti dati, nelle connessioni al database, negli allarmi, ecc. Quasi ovunque nel prodotto a cui potreste connettere dei dati, è possibile usare un segnaposto e poi definire in seguito l'alias che si vuole usare. Basandosi sull'esempio sopra, un'applicazione perfetta per questo sarebbe che invece di creare "Tank1", "Tank2", "Tank3" e così via con ogni display hardcoded nella sua connessione dati, potreste creare un singolo display "Tank" utilizzando connessioni dati con alias. Quindi in runtime, quando si carica quel display, è possibile scegliere la connessione che desiderate utilizzare e il display si connetterà dinamicamente.
 

Concatenare gli Alias

Dovremmo anche analizzare il perchè stiamo utilizzando questo approccio. Se volete semplicemente avere un alias impostato per la concatenazione di singoli alias, perché non crearlo semplicemente nel comando Carica Display per cominciare? In alternativa, ovunque in un display che potreste utilizzare:


<#MyUnifiedAlias#> 

Potete anche concatenarli manualmente e usare:


<#MyValue1#><#MyValue2#><#MyValue3#>

Questi sono ottimi approcci e, in molti casi, sono probabilmente sufficienti. Tuttavia, in questo caso particolare, il display da caricare viene utilizzato frequentemente da una varietà di sistemi all'interno dell'applicazione e non tutti conosceranno necessariamente i valori da utilizzare per tutti e tre gli alias. In questi casi, altri comandi imposteranno solo uno o due di questi valori di alias e faranno affidamento sul fatto che gli alias rimanenti rimangano gli stessi di quelli impostati in precedenza. Per questo motivo, l'utente desidera che gli alias vengano concatenati solo dopo il caricamento del display.
 

Unire Alias e Asset Insieme grazie alle Espressioni

Per iniziare ad affrontare questa sfida, devo prima configurare il mio ambiente di test. Userò dei nomi semplici nello scenario, poiché non avevo accesso al sistema di produzione e stavo semplicemente facendo una prova. Per cominciare, ho creato due asset in Workbench, "Asset1" e "Asset2", ognuna delle quali aveva un comando Carica Display Grafico che trasmetteva alcuni valori per i tre alias che vogliamo concatenare.
 

Configurazione per Comando Asset1


Sul lato GraphWorX64, ho prima creato un test del frame di visualizzazione che ha semplicemente un Asset Navigator e un controllo GraphWorx64 incorporato. Quindi ho creato il display per testare i miei alias, dove ho inserito i miei tre valori di alias individualmente, nonché l'eventuale valore "MyUnifiedAlias". L'obiettivo qui è che dovrei essere in grado di guardare il primo display, selezionare una risorsa dal navigatore e vederla apparire di conseguenza nel visualizzatore.

Frame.gdfx and Aliases.gdfx
 

Ora, ecco che arriva il trucco per far funzionare tutto. Nel visualizzatore incorporato (chiamato solo "Aliases.gdfx"), sono andato sotto le proprietà del display stesso e ho modificato il campo "GlobalAliases" utilizzando l'opzione "Browser dati" nel menu a discesa. Questo mi dà il browser dati completo, ma sono andato alla scheda "Espressione" e ho inserito quanto segue:


x="#MyUnifiedValue="+{{"<#MyValue1#>"}}+{{"<#MyValue2#>"}}+{{"<#MyValue3#>"}}+"/2;"

Per capire perché funziona, facciamo un passo indietro e discutiamo di come viene analizzato l'aliasing. In definitiva, se dovete impostare un alias utilizzando questo campo, un comando di visualizzazione del caricamento o il comando dedicato set global aliases, passerete una stringa composta dal valore e dall'ambito dell'alias che analizzerà ed elaborerà. Questa stringa ha il seguente formato:


#[AliasName]=[AliasValue]/[ScopeNumber];

Ad esempio, se volessi impostare l'alias "OPCServer" su "DXP01", il mio comando avrebbe una stringa come questa:


#OPCServer=DXP01/2;

Il motivo del punto e virgola alla fine è che se si desidera unire più alias in questo comando, è possibile farlo, poiché il punto e virgola funge da delimitatore.

Infine, vi starete chiedendo quale "ambito" è stato utilizzato e cosa potrebbe significare. Nel caso in cui non si abbia familiarità con Global Aliasing utilizzando ambiti diversi, in parole povere consente di definire l'ampiezza delle finestre, delle applicazioni e dei moduli del sistema ICONICS che riceveranno la modifica. Alcuni esempi di valori di ambito sarebbero:

  • 0 – Livello 'Macchina', che interessa globalmente tutti i processi a cui l'utente può avere accesso.
  • 1 – Livello 'Processo', che interessa tutte le istanze dell'alias all'interno dello stesso processo in cui è stato impostato l'alias.
  • 2 – Livello 'Documento', che interessa solo la visualizzazione corrente o la visualizzazione di destinazione in fase di apertura.

A seguito di queste informazioni, nel nostro esempio qui useremo "2" poiché vogliamo che l'alias si applichi solo al display corrente. Ciò lascia aperta la possibilità di aprire più istanze di questa visualizzazione contemporaneamente con valori diversi, se appropriato per il progetto.

Tutto ciò che sto facendo nella soluzione sopra è costruire la stringa che verrà utilizzata attraverso un'espressione, che mi consente di includere valori dinamici al suo interno e risolverli prima che la stringa venga analizzata. In questo caso, quegli input di alias dinamici vengono semplicemente risolti e raggruppati insieme, ma potrei anche usare la varietà di funzioni nell'editor di espressioni, oltre a includere altre stringhe di testo normale tra di loro nella concatenazione.

Il risultato è come previsto, che, dopo aver selezionato un asset, caricherà il display incorporato, imposterà i singoli alias e quindi imposterà anche l'alias concatenato.

Display con Asset1 Selezionato e Display con Asset2 Selezionato

Applicazioni per Aliasing nella Creazione di Display Adattivi

Oltre alla soluzione del problema specifico presentato, questo approccio ha anche applicazioni più ampie nelle interazioni di visualizzazione di GraphWorX64. Sapere come creare la stringa di configurazione per impostare un alias globale può essere utile in molte situazioni. Questo scenario ha esaminato la configurazione in base a valori statici, ma funziona altrettanto bene quando si imposta un valore alias sul risultato di un'altra origine dati. Personalmente, preferisco utilizzare questo approccio quando lavoro con i parametri per passare a una query GridWorX, poiché la sintassi dell'alias si adatta bene alle impostazioni dei parametri. Può essere utilizzato anche per menu a più livelli, in cui un utente deve prima selezionare Attributo1 e quindi visualizzare un elenco personalizzato di opzioni per Attributo 2 e così via. Impostando l'alias sul risultato della prima selezione, è molto più semplice personalizzare le liste lungo la linea.

Solo un avvertimento quando si utilizza questo approccio. Dovreste ricordare che / e ; sono caratteri speciali nella stringa di impostazione dell'alias globale. Se pensate che possano apparire nei valori che state usando per costruire la vostra stringa, allora è una buona idea usare la funzione "sostituisci" per usare invece il carattere di escape per quei simboli come:

replace({{MyTagName}},"/","&/").


Una seconda cosa da considerare è aspettarsi o meno che gli alias originali siano stringhe o numeri. Mentre le stringhe dovrebbero funzionare bene, se il risultato è un numero (intero o virgola mobile), il motore delle espressioni interpreterà che volete sommare quei numeri insieme, non concatenarli. Questa non è una stranezza dell'analisi dell'espressione, poiché il simbolo "+" può essere utilizzato sia per l'addizione numerica che per la concatenazione, ma verrà impostato automaticamente sull'addizione quando è ambiguo. Se questo è un potenziale rischio nella vostra applicazione, usate semplicemente la funzione "tostring" per forzarne l'interpretazione come una stringa:

    tostring({{MyTagName}}) 

Spero che questo post del blog abbia sufficientemente descritto la risposta alla domanda originariamente proposta e forse abbia risposto ad alcune altre domande. Assicuratevi di visitare spesso questo blog per le risposte future a richieste/casi d'uso comuni, nonché per altre informazioni interessanti da ICONICS.